package Calculator.Parser.Elements;

import Calculator.Exceptions.UnclosedParenthesisException;
import Calculator.Exceptions.WrongExpressionException;
import Calculator.Parser.InfixParser;

public abstract class Token {
	
	private String id;
	private Integer precedence = null;
	
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Integer getPrecedence() {
		return precedence;
	}

	public void setPrecedence(Integer precedence) {
		this.precedence = precedence;
	}

	/**
	 * Iteración de lectura de un literal. Según el tipo, las decisiones tomadas serán distintas
	 * @param infixParser Parser que lee el cálculo
	 * @throws UnclosedParenthesisException
	 */
	public abstract void performIteration(InfixParser infixParser) throws UnclosedParenthesisException;

	/**
	 * Chequear sintáxis del token, respecto a su sucesor es válida
	 * @param t Token a chequear si es válido como siguiente del actual
	 * @throws WrongExpressionException
	 */
	public abstract void checkCorrectSyntax(Token nextToken) throws WrongExpressionException;
	
	public abstract Boolean isOperator();
	
	public abstract Boolean isNumber();
	
}
